package org.jingouzhui.test.domain;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @description:
 * @author: jingouzhui
 * @date: 2025/5/7 下午7:39
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class NumberTest {


        /**
         * 泛型加法方法，支持 Integer、Double、Float、Long
         * @param a 第一个操作数
         * @param b 第二个操作数
         * @return 两数之和（与输入类型一致）
         * @throws IllegalArgumentException 如果类型不支持
         */
        @SuppressWarnings("unchecked")
        public static <T extends Number> T add(T a, T b) {
            if (a == null || b == null) {
                throw new IllegalArgumentException("参数不能为 null");
            }

            if (a instanceof Integer) {
                return (T) Integer.valueOf(a.intValue() + b.intValue());
            } else if (a instanceof Double) {
                return (T) Double.valueOf(a.doubleValue() + b.doubleValue());
            } else if (a instanceof Float) {
                return (T) Float.valueOf(a.floatValue() + b.floatValue());
            } else if (a instanceof Long) {
                return (T) Long.valueOf(a.longValue() + b.longValue());
            } else {
                throw new IllegalArgumentException("不支持的类型: " + a.getClass());
            }
        }
        @Test
        public  void test() {
            // 测试示例
            Integer intSum = add(3, 5); // 自动装箱为 Integer
            Double doubleSum = add(2.5, 3.7);
            Float floatSum = add(1.2f, 3.4f);
            Long longSum = add(1000L, 2000L);

            System.out.println("Integer 相加结果: " + intSum);    // 8
            System.out.println("Double 相加结果: " + doubleSum);  // 6.2
            System.out.println("Float 相加结果: " + floatSum);    // 4.6
            System.out.println("Long 相加结果: " + longSum);      // 3000
        }

}
